﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using TPDiseño.Clases_de_Control;
using TPDiseño.Clases_de_Entidad;
using TPDiseño.DTO_s;

namespace TPDiseño.Interfaces
{
    // Delegados
    public delegate void FinishEvaluarCand1EventHandler(object sender, System.EventArgs e); // Delegado encargado para manejar evento terminar

    public partial class EvaluarCand1 : Form
    {
        // Eventos
        public event FinishEvaluarCand1EventHandler terminar; // Evento terminar

        // Atributos
        /********************************************************************/
        // Gestores
        private Gestor_de_Puesto miGestor_de_Puesto = new Gestor_de_Puesto();
        private Gestor_Evaluacion miGestor_Evaluacion = new Gestor_Evaluacion();
        
        // Objetos transitorios que maneja el formulario
        List<PuestoCompetencia> puestosCompetenciasAptosParaEvaluar;
        private Puesto puestoSelecciondo;
        // Objeto de Salida
        Puesto puestoParaEvaluar;
       
        
        public EvaluarCand1()
        {
            InitializeComponent();
        }

        // Administrador del evento termino
        public void termino(Puesto unPuesto)
        {
            // Creo el DTOCandidatoClave con Argumentos...
            DTOPuestoSeleccionadoArgumentos e = new DTOPuestoSeleccionadoArgumentos(unPuesto);
            // Disparo el evento
            terminar(this, e);
        }

        private void button_buscarPuesto_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor; //cursor de espera
            // Pimero limpio los bindig, por si ya tenian algo
            bindingSourceDTOPuestoEmpresa.Clear();
            bindingSourceDTOCompetenciaPonderacion.Clear();
            
            List<Puesto> puestoBuscados;

            puestoBuscados = miGestor_de_Puesto.buscar(this.textBoxPuestoBuscado.Text);

            //Recorro los candidatos buscados para agregarlos al biding de la grilla
            foreach (Puesto unPuesto in puestoBuscados)
            {
                // Agrego uno a uno al binding
                bindingSourceDTOPuestoEmpresa.Add(new DTOPuestoEmpresa(unPuesto));
            }

            // Finalmente Limpio la seleccion de las grillas
            dataGridViewPuestoCompetencia.ClearSelection();
            dataGridViewCompetenciaPonderada.ClearSelection();
            Cursor.Current = Cursors.Default; //cursor normal

        }

        // Metodos
        private void cargarEvaluaciones(Puesto unPuesto)
        {
            // Apunto la lista de puestos competencias (competencias ponderadas para el puesto) aptos para evaluar
            puestosCompetenciasAptosParaEvaluar = this.miGestor_Evaluacion.competenciasAptasParaEvaluar(unPuesto);

            // Antes de agregar elementos al binding, lo limpio
            bindingSourceDTOCompetenciaPonderacion.Clear();
            
            // Recorro esta lista para agregar sus elementos al binding de la grilla de datos (mostrarla en la interfaz)
            foreach (PuestoCompetencia unPuestoCompetencia in puestosCompetenciasAptosParaEvaluar)
            {
                this.bindingSourceDTOCompetenciaPonderacion.Add(unPuestoCompetencia.DTOcompetenciaPonderacion());
            }

        }

        private void dataGridViewPuestoCompetencia_Selection(object sender, EventArgs e)
        {
            // Si hay algun elemento seleccionado...
            if (this.dataGridViewPuestoCompetencia.SelectedRows.Count > 0)
            {
                // Apunto el puesto seleccionado, lo tengo como elemento transitorio del formulario
                puestoSelecciondo = ((DTOPuestoEmpresa)dataGridViewPuestoCompetencia.SelectedRows[0].DataBoundItem).puestoInstancia();
                              
                // invoco cargarEvaluaciones con el puesto seleccionado del dataGridView
                cargarEvaluaciones(puestoSelecciondo);
                
            }
        }

        private void button_siguiente_Click(object sender, EventArgs e)
        {
            // Si hay elementos la lista de candidatos seleccionados
            if (bindingSourceDTOCompetenciaPonderacion.List.Count > 0)
            {
                // Apunto el puesto definitivo para evaluar
                puestoParaEvaluar = puestoSelecciondo.clonarNivel();
                // Al puesto definitivo le asigno las competencias para evaluar
                puestoParaEvaluar._competenciasPonderadas = puestosCompetenciasAptosParaEvaluar;
                // Invoco el administrador del evento para que lo dispare !!
                termino(puestoParaEvaluar);
            }
            else
            {//---------------------------------------------------------------------------

                MessageBox.Show("No hay puesto seleccionados para ser evaluados");
            }
        }

        private void Cancelar_Click(object sender, EventArgs e)
        {
            // Cerrar la ventana...
            this.Close();
        }

    }
}
